﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.UI;
using System.Web.UI.WebControls;
using PortalCurriculo.Domain;
using PortalCurriculo.WebUI.Helpers;

namespace PortalCurriculo.WebUI.Selecionadores
{
    public partial class RequisitosVaga : RecruiterAccessHelper
    {
        //        static List<VagaIdioma> VagaIdiomas { get; set; }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (IsPostBack) return;

            PreencherDados();
            PreencherTela();
        }

        private void PreencherDados()
        {
            int idVaga = ParseIdQueryString("~/Selecionadores/MinhasVagas.aspx");
            var vaga = new Vaga {Id = idVaga};
            vaga = vaga.Selecionar();

            if (vaga.DeficienteFisico)
                radDeficienciaSim.Checked = true;
            else
                radDeficienciaNao.Checked = true;

            txtTempoExperienciaMinimo.Text = vaga.TempoExperienciaMinimo.ToString();
            txtTempoExperienciaMaximo.Text = vaga.TempoExperienciaMaximo.ToString();
            ddlTipoExperienciaMinimo.SelectedValue = vaga.TipoTempoExperienciaMinimo;
            ddlTipoExperienciaMaximo.SelectedValue = vaga.TipoTempoExperienciaMaximo;
            if (vaga.EmpresaAberta != null) chkEmpresaAberta.Checked = (bool) vaga.EmpresaAberta;

            PreencherDadosIdioma();
        }

        protected void lnkSalvar_Click(object sender, EventArgs e)
        {
            int idVaga = ParseIdQueryString("~/Selecionadores/MinhasVagas.aspx");
            var vaga = new Vaga {Id = idVaga};
            vaga = vaga.Selecionar();

            vaga.DeficienteFisico = radDeficienciaSim.Checked ? true : false;
            vaga.EmpresaAberta = chkEmpresaAberta.Checked;
            vaga.TempoExperienciaMaximo = decimal.Parse(txtTempoExperienciaMaximo.Text);
            vaga.TempoExperienciaMinimo = decimal.Parse(txtTempoExperienciaMinimo.Text);
            vaga.TipoTempoExperienciaMaximo = ddlTipoExperienciaMaximo.SelectedValue;
            vaga.TipoTempoExperienciaMinimo = ddlTipoExperienciaMinimo.SelectedValue;

            Response.Redirect(string.Concat("~/Selecionadores/VisualizarVaga.aspx?Id=", ParseIdQueryString()));
        }

        private void PreencherDadosIdioma()
        {
            var vagaIdioma = new VagaIdioma {IdVaga = ParseIdQueryString()};
            lsvIdioma.DataSource = vagaIdioma.SelecionarLista();
            lsvIdioma.DataBind();
        }

        private void PreencherTela()
        {
            PreencherIdioma();
            PreencherNivel();
        }

        private void PreencherIdioma()
        {
            List<Idioma> idiomas = new Idioma().SelecionarAtivos();
            WebHelper.FillDropDownList(ddlIdioma, idiomas, true);

            ddlIdioma.Items.Add(new ListItem("Outro", "-2"));
        }

        private void PreencherNivel()
        {
            var niveis = (from nivel in new Nivel().SelecionarAtivos()
                          select new
                                     {
                                         nivel.Id,
                                         Descricao = nivel.Nome
                                     });
            WebHelper.FillDropDownList(ddlNivel, niveis, true);
        }

        protected void ddlIdioma_SeletedIndexChanged(object sender, EventArgs e)
        {
            txtOutroIdioma.Visible = ddlIdioma.SelectedValue == "-2";
            lblOutro.Visible = ddlIdioma.SelectedValue == "-2";
        }

        protected void lnkAdicionarIdioma_Click(object sender, EventArgs e)
        {
            if (!Page.IsValid) return;

            //if (VagaIdiomas == null) VagaIdiomas = new List<VagaIdioma>();

            var vagaIdioma = new VagaIdioma
                                 {
                                     IdIdioma = ddlIdioma.SelectedValue == "-2" ? (int?) null : int.Parse(ddlIdioma.SelectedValue),
                                     Outro = txtOutroIdioma.Text,
                                     Imprescindivel = bool.Parse(ddlTipo.SelectedValue),
                                     IdNivel = int.Parse(ddlNivel.SelectedValue),
                                     IdVaga = ParseIdQueryString()
                                 };

            vagaIdioma.Save();

            LimparCamposIdioma();

            PreencherDadosIdioma();

            WebHelper.ShowMessageBox("Idioma incluído com sucesso!", ref updVaga);
        }

        private void LimparCamposIdioma()
        {
            txtOutroIdioma.Text = string.Empty;
            ddlTipo.SelectedIndex = 0;
            ddlNivel.SelectedIndex = 0;
            ddlIdioma.SelectedIndex = 0;

            ddlIdioma.Focus();
        }

        protected void lsvIdioma_ItemDataBound(object sender, ListViewItemEventArgs e)
        {
            var item = (ListViewDataItem) e.Item;
            var vagaIdioma = (VagaIdioma) item.DataItem;

            var idioma = (Label) item.FindControl("lblIdioma");
            var tipo = (Label) item.FindControl("lblTipo");
            var nivel = (Label) item.FindControl("lblNivel");
            var excluir = (ImageButton) item.FindControl("imbExcluir");

            idioma.Text = vagaIdioma.Idioma == null ? vagaIdioma.Outro : vagaIdioma.Idioma.Descricao;
            nivel.Text = vagaIdioma.Nivel.Nome;
            tipo.Text = vagaIdioma.Imprescindivel.ToString();
            excluir.Attributes.Add("Id", vagaIdioma.Id.ToString());

            if (vagaIdioma.Id != 0) return;

            idioma.Attributes.Add("Id", vagaIdioma.Id.ToString());
            nivel.Attributes.Add("Id", vagaIdioma.Nivel.Id.ToString());
        }

        protected void imbExcluir_Click(object sender, ImageClickEventArgs e)
        {
            int id = int.Parse(((ImageButton) sender).Attributes["Id"]);

            new VagaIdioma {Id = id}.Selecionar().Delete();

            PreencherDadosIdioma();
        }
    }
}